1.03. Тест на готовность к программированию
Тест на готовность к программированию
1: База
Вопросы
- Что такое операционная система?
- Какая роль у ядра (kernel) в операционной системе?
- Что происходит при запуске исполняемого файла на компьютере?
- Зачем нужен терминал (командная строка)?
- Какие основные функции выполняет центральный процессор (CPU)?
- Что такое оперативная память (RAM) и чем она отличается от постоянного хранилища?
- Как компьютер получает доступ к интернету?
- Что такое IP-адрес и зачем он нужен?
- Как работает DNS-система?
- Что означает «загрузка процессора» и как её можно наблюдать?
Практические задачи
Задача 1.
Откройте терминал (или командную строку) и выполните команду, которая покажет текущую директорию. Напишите, какая команда использовалась и что она вернула.
Задача 2.
Найдите IP-адрес вашего устройства в локальной сети. Опишите шаги, которые вы выполнили, и приведите результат.
Задача 3.
Создайте текстовый файл hello.txt с содержимым «Hello, world!» с помощью терминала. Убедитесь, что файл создан, и опишите использованные команды.
Ответы
Ответы на вопросы
- Операционная система — это программное обеспечение, управляющее аппаратными ресурсами компьютера и предоставляющее среду для выполнения приложений.
- Ядро (kernel) управляет доступом программ к оборудованию: распределяет память, обрабатывает запросы ввода-вывода, планирует выполнение процессов.
- При запуске исполняемого файла операционная система загружает его в память, выделяет ресурсы и передаёт управление первой инструкции программы.
- Терминал позволяет пользователю взаимодействовать с операционной системой через текстовые команды, управлять файлами, запускать программы и настраивать систему.
- Центральный процессор (CPU) выполняет инструкции программ, производит вычисления, управляет потоком данных между компонентами системы.
- Оперативная память (RAM) — это быстрое временное хранилище для данных, используемых запущенными программами. В отличие от диска, она очищается при выключении питания.
- Компьютер подключается к интернету через сетевой интерфейс (проводной или беспроводной), получает IP-адрес от маршрутизатора и использует протоколы (например, TCP/IP) для обмена данными.
- IP-адрес — уникальный числовой идентификатор устройства в сети, необходимый для маршрутизации данных между устройствами.
- DNS (Domain Name System) преобразует человекочитаемые доменные имена (например,
example.com) в IP-адреса, по которым компьютеры находят серверы. - Загрузка процессора — это процент времени, в течение которого CPU занят выполнением задач. Её можно наблюдать через диспетчер задач (Windows), Activity Monitor (macOS) или команды типа
top/htop(Linux).
Ответы на задачи
Задача 1.
- В Windows: команда
cdбез аргументов показывает текущий диск и путь. - В macOS/Linux: команда
pwd(print working directory).
Пример вывода:/home/user/documents.
Задача 2.
- Windows:
ipconfig→ найти строкуIPv4 Address. - macOS:
ipconfig getifaddr en0(или через «Системные настройки → Сеть»). - Linux:
ip addr showилиhostname -I.
Пример результата:192.168.1.35.
Задача 3.
- Windows (PowerShell):
echo "Hello, world!" > hello.txt - macOS/Linux:
echo "Hello, world!" > hello.txt
Проверка:
cat hello.txt
Вывод: Hello, world!
2: Основы кода
Вопросы
- Что такое переменная в программировании?
- Каково назначение условного оператора (
if)? - Чем отличается цикл
forот циклаwhile? - Что делает оператор присваивания (
=)? - Что такое функция и зачем она нужна?
- Как передаются данные в функцию и как функция возвращает результат?
- Что означает термин «тип данных»? Приведите три примера.
- Что такое комментарий в коде и какова его роль?
- Какой язык программирования считается «низкоуровневым», а какой — «высокоуровневым»? В чём разница?
- Что происходит при выполнении программы построчно сверху вниз?
Практические задачи
Задача 1.
Напишите фрагмент кода на любом языке, который:
- объявляет переменную
ageсо значением25, - проверяет, больше ли
age18, - выводит соответствующее сообщение.
Задача 2.
Напишите цикл, который выводит числа от 1 до 10. Используйте любой удобный тип цикла.
Задача 3.
Создайте функцию с именем greet, которая принимает имя пользователя и возвращает строку вида "Привет, {имя}!". Вызовите её с аргументом "Анна" и выведите результат.
Ответы
Ответы на вопросы
- Переменная — это именованное хранилище для данных, значение которого может изменяться во время выполнения программы.
- Условный оператор
ifпозволяет выполнять блок кода только при истинности заданного условия. - Цикл
forобычно используется, когда известно количество итераций (например, перебор диапазона). Циклwhileпродолжается, пока выполняется условие, и применяется, когда число шагов заранее неизвестно. - Оператор присваивания (
=) связывает значение с именем переменной, сохраняя данные в памяти под этим именем. - Функция — это именованный блок кода, предназначенный для выполнения определённой задачи. Она повышает читаемость, устраняет дублирование и упрощает тестирование.
- Данные передаются в функцию через параметры (в скобках при вызове). Результат возвращается с помощью ключевого слова
return(или аналога), после чего становится доступен вызывающему коду. - Тип данных определяет возможные значения и операции над переменной. Примеры: целое число (
int), строка (string), логическое значение (boolean). - Комментарий — текст в коде, игнорируемый интерпретатором или компилятором. Он поясняет логику, упрощает поддержку и помогает другим разработчикам понять намерения автора.
- Низкоуровневый язык (например, Assembly) близок к машинному коду, даёт прямой контроль над железом, но сложен в использовании. Высокоуровневый язык (например, Python) абстрагирован от деталей оборудования, проще в освоении и быстрее в разработке.
- При построчном выполнении интерпретатор читает каждую инструкцию по порядку, выполняет её и переходит к следующей. Это характерно для скриптовых языков, таких как Python или JavaScript.
Ответы на задачи
Задача 1. (на Python)
age = 25
if age > 18:
print("Совершеннолетний")
else:
print("Несовершеннолетний")
Задача 2. (на JavaScript)
for (let i = 1; i <= 10; i++) {
console.log(i);
}
Задача 3. (на C#)
string greet(string name) {
return $"Привет, {name}!";
}
Console.WriteLine(greet("Анна"));
// Вывод: Привет, Анна!
3: Разработка
Вопросы
- Что такое интегрированная среда разработки (IDE) и зачем она нужна?
- Какую роль играет отладчик в процессе написания кода?
- Что такое точка останова (breakpoint) и как она используется?
- Зачем разработчики используют системы контроля версий?
- Что такое репозиторий в Git?
- Какие основные команды Git вы знаете и для чего они служат?
- Что такое коммит и что он должен содержать?
- Что такое фреймворк и чем он отличается от библиотеки?
- Зачем применяют контейнеризацию с помощью Docker?
- Что такое образ (image) и контейнер в Docker?
Практические задачи
Задача 1.
Создайте локальный Git-репозиторий, добавьте в него файл readme.md с текстом # Мой проект, сделайте коммит с сообщением "Начало проекта". Опишите последовательность команд.
Задача 2.
Установите любой современный редактор кода или IDE (например, VS Code). Создайте в нём новый файл debug_example.py с простым скриптом на Python. Установите точку останова на строке вывода и запустите отладку. Опишите, что вы наблюдали.
Задача 3.
Напишите простой Dockerfile, который создаёт образ на основе официального образа Python, копирует в него файл app.py и запускает его при старте контейнера.
Ответы
Ответы на вопросы
- Интегрированная среда разработки (IDE) объединяет редактор кода, отладчик, средства сборки и управления проектами в одном приложении, ускоряя разработку и снижая количество ошибок.
- Отладчик позволяет пошагово выполнять программу, просматривать значения переменных и выявлять причины некорректного поведения.
- Точка останова (breakpoint) — это маркер в коде, при достижении которого выполнение программы приостанавливается, чтобы разработчик мог проанализировать состояние программы.
- Системы контроля версий позволяют отслеживать изменения в коде, возвращаться к предыдущим версиям, работать в команде без конфликтов и документировать историю разработки.
- Репозиторий в Git — это каталог, содержащий все файлы проекта и скрытую папку
.git, где хранится вся история изменений. - Основные команды Git:
git init— создаёт новый репозиторий,git add— добавляет изменения в индекс,git commit— фиксирует изменения с сообщением,git status— показывает текущее состояние,git log— отображает историю коммитов.
- Коммит — это зафиксированное состояние файлов в определённый момент времени. Он должен содержать краткое и ясное сообщение, описывающее суть изменений.
- Фреймворк задаёт архитектуру приложения и управляет потоком выполнения; разработчик дополняет его своей логикой. Библиотека — это набор функций, которые вызываются по желанию разработчика.
- Контейнеризация через Docker обеспечивает изоляцию приложения со всеми зависимостями, гарантируя одинаковое поведение в разных средах — от разработки до продакшена.
- Образ (image) — это неизменяемый шаблон с файловой системой, кодом и настройками. Контейнер — это запущенный экземпляр образа, в котором выполняется приложение.
Ответы на задачи
Задача 1.
mkdir my_project
cd my_project
git init
echo "# Мой проект" > readme.md
git add readme.md
git commit -m "Начало проекта"
Задача 2.
Пример содержимого debug_example.py:
name = "Мария"
greeting = f"Привет, {name}!"
print(greeting)
В VS Code:
- Открыли файл,
- Кликнули слева от строки
print(greeting)— появилась красная точка (breakpoint), - Нажали F5 → выбрали «Python File»,
- Выполнение остановилось на точке, в панели Variables отобразились значения
nameиgreeting.
Задача 3.
Dockerfile:
FROM python:3.11-slim
WORKDIR /app
COPY app.py .
CMD ["python", "app.py"]
Предполагается, что рядом лежит файл app.py с исполняемым Python-кодом.
4: Продвинутая работа с кодом
(ООП, сборка мусора, стек и очереди, алгоритмы)
Вопросы
- Что такое инкапсуляция в объектно-ориентированном программировании?
- Каково назначение наследования?
- Что означает полиморфизм и как он проявляется в коде?
- Что такое класс и чем он отличается от объекта?
- Что такое сборка мусора и зачем она нужна?
- Какие языки используют автоматическую сборку мусора, а какие требуют ручного управления памятью?
- Что такое стек (stack) и как он работает?
- Что такое очередь (queue) и в чём её отличие от стека?
- Что означает «алгоритмическая сложность» и зачем её оценивать?
- Какой алгоритм поиска элемента в неотсортированном массиве является стандартным, и какова его сложность?
Практические задачи
Задача 1.
Создайте класс Car с полями brand и speed, методом accelerate(delta), увеличивающим скорость, и методом get_info(), возвращающим строку вида "Машина: Toyota, скорость: 60". Продемонстрируйте создание объекта и вызов методов.
Задача 2.
Реализуйте стек с помощью списка (или массива). Поддерживайте операции push(item), pop() и is_empty(). Протестируйте его, добавив три элемента и удалив два.
Задача 3.
Напишите функцию linear_search(arr, target), которая ищет значение target в списке arr и возвращает индекс первого совпадения или -1, если элемент не найден. Протестируйте её на примере.
Ответы
Ответы на вопросы
- Инкапсуляция — это объединение данных и методов, работающих с этими данными, внутри одного объекта, а также ограничение прямого доступа к внутреннему состоянию извне.
- Наследование позволяет одному классу (потомку) получать свойства и методы другого класса (родителя), обеспечивая повторное использование кода и иерархическую организацию.
- Полиморфизм — способность объектов разных типов обрабатываться через единый интерфейс. Например, метод
draw()может вести себя по-разному для объектовCircleиRectangle, но вызываться одинаково. - Класс — это шаблон или описание структуры и поведения. Объект — это конкретный экземпляр этого шаблона, существующий в памяти во время выполнения программы.
- Сборка мусора — автоматический процесс освобождения памяти, занятой объектами, на которые больше нет ссылок. Это предотвращает утечки памяти и упрощает разработку.
- Языки с автоматической сборкой мусора: Java, C#, Python, JavaScript, Go. Языки с ручным управлением: C, C++, Rust (частично — через владение).
- Стек (stack) — структура данных, работающая по принципу LIFO (Last In, First Out): последний добавленный элемент извлекается первым. Используется, например, при вызове функций.
- Очередь (queue) — структура данных по принципу FIFO (First In, First Out): первый добавленный элемент извлекается первым. Применяется в планировщиках задач, буферах и обработке событий.
- Алгоритмическая сложность оценивает, как растёт время выполнения или объём памяти в зависимости от размера входных данных. Это помогает выбирать эффективные решения при масштабировании.
- Линейный поиск — стандартный алгоритм для неотсортированного массива. Он последовательно проверяет каждый элемент. Его временная сложность — O(n).
Ответы на задачи
Задача 1. (на Python)
class Car:
def __init__(self, brand, speed=0):
self.brand = brand
self.speed = speed
def accelerate(self, delta):
self.speed += delta
def get_info(self):
return f"Машина: {self.brand}, скорость: {self.speed}"
# Использование
my_car = Car("Toyota")
my_car.accelerate(60)
print(my_car.get_info()) # Машина: Toyota, скорость: 60
Задача 2. (на JavaScript)
class Stack {
constructor() {
this.items = [];
}
push(item) {
this.items.push(item);
}
pop() {
return this.items.pop();
}
is_empty() {
return this.items.length === 0;
}
}
const s = new Stack();
s.push(1); s.push(2); s.push(3);
console.log(s.pop()); // 3
console.log(s.pop()); // 2
console.log(s.is_empty()); // false
Задача 3. (на C#)
int LinearSearch(int[] arr, int target) {
for (int i = 0; i < arr.Length; i++) {
if (arr[i] == target) return i;
}
return -1;
}
// Тест
int[] numbers = {10, 20, 30, 40};
Console.WriteLine(LinearSearch(numbers, 30)); // 2
Console.WriteLine(LinearSearch(numbers, 99)); // -1
5: Языки
(JS, Python, Java, C#, C++, PHP, Kotlin, Go, Rust, Swift)
Вопросы
- Какой язык чаще всего используется для разработки веб-интерфейсов в браузере?
- Почему Python популярен в научных вычислениях и автоматизации?
- Какая платформа лежит в основе исполнения Java-приложений?
- В какой экосистеме доминирует C# и какие типы приложений на нём чаще всего пишут?
- Чем C++ отличается от большинства современных языков в плане управления памятью?
- Для каких задач до сих пор активно применяется PHP?
- Почему Kotlin стал предпочтительным языком для разработки под Android?
- Какие свойства Go делают его удобным для написания серверных сервисов?
- Какие гарантии безопасности предоставляет Rust за счёт своей системы владения (ownership)?
- В какой среде разработки Swift является основным языком и почему?
Практические задачи
Задача 1.
Напишите простую HTTP-функцию на одном из языков (например, Python с Flask или Node.js с Express), которая при GET-запросе на /hello возвращает JSON {"message": "Привет из облака!"}.
Задача 2.
Создайте консольную программу на любом компилируемом языке (C#, Java, Go, Rust), которая выводит текущую дату и время в формате ГГГГ-ММ-ДД ЧЧ:ММ.
Задача 3.
Напишите функцию на двух разных языках (например, Python и JavaScript), которая принимает массив чисел и возвращает сумму всех чётных элементов.
Ответы
Ответы на вопросы
- JavaScript — основной язык клиентской веб-разработки, выполняемый непосредственно в браузере.
- Python обладает простым синтаксисом, богатой стандартной библиотекой и множеством специализированных пакетов (NumPy, Pandas, Scikit-learn), что ускоряет прототипирование и анализ данных.
- Java Virtual Machine (JVM) — виртуальная машина, которая выполняет байт-код Java, обеспечивая кроссплатформенность через принцип «написал один раз — запускай где угодно».
- C# тесно интегрирован с экосистемой Microsoft и .NET. На нём пишут десктопные приложения (WPF, WinForms), веб-сервисы (ASP.NET), игры (Unity) и корпоративные решения.
- C++ предоставляет прямой контроль над памятью: разработчик вручную выделяет (
new) и освобождает (delete) ресурсы, что даёт высокую производительность, но требует осторожности. - PHP остаётся востребованным для поддержки и разработки веб-сайтов, особенно на базе CMS вроде WordPress, Drupal и Laravel-приложений.
- Kotlin полностью совместим с Java, более лаконичен, безопасен (null-safety) и официально поддерживается Google как предпочтительный язык для Android.
- Go предлагает простой синтаксис, встроенную поддержку горутин (лёгких потоков), быструю компиляцию и минимальные зависимости, что идеально для микросервисов и высоконагруженных серверов.
- Rust исключает гонки данных и использование освобождённой памяти на этапе компиляции благодаря системе владения и заимствования, не требуя сборщика мусора.
- Swift — основной язык разработки под iOS, macOS и другие платформы Apple. Он интегрирован в Xcode, обеспечивает высокую производительность и безопасность, а также активно развивается компанией Apple.
Ответы на задачи
Задача 1. (Node.js + Express)
const express = require('express');
const app = express();
app.get('/hello', (req, res) => {
res.json({ message: "Привет из облака!" });
});
app.listen(3000, () => console.log('Сервер запущен на порту 3000'));
Задача 2. (C#)
using System;
class Program {
static void Main() {
Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm"));
}
}
Задача 3.
Python:
def sum_even(numbers):
return sum(x for x in numbers if x % 2 == 0)
print(sum_even([1, 2, 3, 4, 5, 6])) # 12
JavaScript:
function sumEven(numbers) {
return numbers.filter(x => x % 2 === 0).reduce((a, b) => a + b, 0);
}
console.log(sumEven([1, 2, 3, 4, 5, 6])); // 12